#include "EntrerTraits.h"

#include <QtGui/QApplication>

#include <QtGui/QLabel>
#include <QtGui/QSpinBox>
#include <QtGui/QGridLayout>
#include <QtGui/QGroupBox>
#include <QtGui/QPushButton>

#include <QtGui/QMessageBox>

#include <iostream>

#include <algorithm>

using namespace std;

QString EntrerTraits::NomTraits[6] =
  {
    trUtf8("Force"),
    trUtf8("Dextérité"),
    trUtf8("Constitution"),
    trUtf8("Intelligence"),
    trUtf8("Sagesse"),
    trUtf8("Charisme")
  };

/**  Constructeur par défaut.
 * On prépare les étiquette avec les noms et les différents spinbox.
 *
 * @param parent pointeur sur le widget parent (orphelin par défaut)
 */
EntrerTraits::EntrerTraits(QWidget *parent)
  : BaseUI( "EntrerTraits", parent )
{
  QGroupBox *groupe = new QGroupBox( trUtf8("Entrer les traits"), this);
  QGridLayout *groupeLayout = new QGridLayout( groupe );

  QLabel *labels[6] = {
    new QLabel( NomTraits[0], this ),
    new QLabel( NomTraits[1], this ),
    new QLabel( NomTraits[2], this ),
    new QLabel( NomTraits[3], this ),
    new QLabel( NomTraits[4], this ),
    new QLabel( NomTraits[5], this )
  };

  for (unsigned int i(0); i < 6; i++)
    valeurs.push_back( new QSpinBox(this) );
  for (unsigned int i(0); i < 6; i++)
    {
      valeurs[i] -> setMinimum(3);
      valeurs[i] -> setMaximum(19);
      valeurs[i] -> setToolTip( trUtf8("Score de ") +  NomTraits[i] );
    }

  boutons.push_back( new QPushButton( trUtf8("&Quitter"), this ) );
  boutons.back() -> setToolTip( trUtf8("Quitter le programme") );
  connect( boutons.back()  , SIGNAL( clicked() ), this, SLOT( annuler() ) );
  boutons.push_back( new QPushButton( trUtf8("&OK"), this ) );
  boutons.back() -> setToolTip( trUtf8("Accepter et continuer") );
  connect( boutons.back(), SIGNAL( clicked() ), this, SLOT( fermer() ) );

  for (unsigned int i(0); i < 6; i++)
    {
      groupeLayout -> addWidget(labels[i] , i, 0);
      groupeLayout -> addWidget(valeurs[i], i, 1);
    }

  groupe -> setLayout( groupeLayout );

  fenetreLayout -> addWidget( groupe );

  setFenetreLayout();
}

/**
 * Destructeur, ne fait rien de spécial
 */
EntrerTraits::~EntrerTraits()
{}

/**
 * Permet de récupérer la valeur des traits du personnage.
 *
 * Avant de copier les éléments, il faut s'assurer de la taille du
 * vecteur passé en argument... sinon l'exécution s'arrête sans un
 * message d'erreur.
 *
 * @param tab tableau des traits (contient 7 éléments, car la force
 * exceptionnelle est aussi stockée ici (mise à zéro).
 * @return StatusCode \e true si choix validé, \e false sinon.
 */
StatusCode EntrerTraits::demanderTraits(vector< unsigned int >& tab)
{
  this -> show();

  qApp -> exec();

  tab.assign( 7, 0 );
  for (unsigned int i(0); i < 6; i++)
    tab[i] = valeurs[i] -> value();

  tab[6] = 0;

  return StatusCode( OK );
}
